/*
 * Curva.cpp
 *
 *  Created on: 08/12/2009
 *      Author: leonardo
 */

#include "Curva.h"
#include "Color.h"
#include <GL/glut.h>

Curva::~Curva(){ }

void Curva::setColorControl(const Color & color)
{
	this->colorPtsControl = color;
}
void Curva::setColor(const Color & color)
{
	this->colorPts = color;
}

void Curva::agregarPuntoControl(Punto punto)
{
	ptsControl.push_back(punto);
}

void Curva::agregarPuntoCurva(Punto punto)
{
	ptsCurva.push_back(punto);
}

void Curva::setPuntosControl(const std::vector<Punto> & pts)
{
	 for(unsigned i=0 ; i< pts.size();i++)
	 {
		   this->ptsControl.push_back(pts[i]);
	 }
}

unsigned Curva::getCantidadPuntosControl()
{
	return this->ptsControl.size();
}

unsigned Curva::getCantidadPuntos()
{
	return this->ptsCurva.size();
}


Punto Curva::getPunto(int indice)
{
	return ptsCurva[indice];
}

std::vector<Punto> Curva::getPtsControl(){
	return ptsControl;
}


Punto Curva::operator[](int indice){
	return ptsCurva[indice];
}
Punto Curva::getTangente(unsigned indice)
{
	if (  indice == 0 )
		return (ptsCurva[indice + 1] - ptsCurva[indice] );

	if ( indice == ptsCurva.size() -1 )
		return ( ptsCurva[indice] - ptsCurva[indice -1 ]);

	return ( ptsCurva[indice + 1] - ptsCurva[indice - 1] );
}

void Curva::pintarCurva()
{
	for ( unsigned i = 1; i< ptsCurva.size();i++ )
	{
		glBegin (GL_LINE);
			glClear(GL_COLOR_BUFFER_BIT);
			glPointSize(4);
			glColor3f(colorPts.r(),colorPts.g(),colorPts.b());
			glVertex3f(ptsCurva[i-1].x(),ptsCurva[i-1].y(),ptsCurva[i-1].z());
			glVertex3f(ptsCurva[i].x(),ptsCurva[i].y(),ptsCurva[i].z());
			glFlush();
		glEnd();
	}
	for ( unsigned i = 0; i< ptsControl.size();i++ )
	{
		glBegin (GL_POINTS);
			glClear(GL_COLOR_BUFFER_BIT);
			glPointSize(10);
			glColor3f(colorPtsControl.r(),colorPtsControl.g(),colorPtsControl.b());
			glVertex3f(ptsControl[i].x(),ptsControl[i].y(),ptsControl[i].z());
			glFlush();
		glEnd();
	}

}
